
/**
 * promise 承诺
 * 实现承诺   承诺石沉大海   承诺等待结果中
 * resolve    reject        pending
 * 解决问题   拒绝接收       悬而未决的(等待回应)
 * 
 * 解决异步流程化的一种方式！！！
 * 
 * 
 * Promise 是构造函数  需要new
 * Promise 参数  executor 执行器
 * executor -> resolve reject 函数
 * executor new Promise 调用
 * 
 */

// executor 是同步执行的
// let promise = new Promise((resolve, reject) => {
//   console.log(1);
//   // resolve('resolve');
//   reject('reject');
// })

// // then 是异步调用
// promise.then(res => {
//   console.log(res);
// }, err => {
//   console.log('then', err);
//   return 'err then';
// }).catch(err => {
//   console.log('catch', err);
// })

// console.log(2);

/**
 * 两个参数 一个状态
 * resolve reject pending
 * 
 * 1. pending -> resolved
 *    pending -> rejected
 * 
 * 2. 反过来不行
 * 
 * 3. resolved <-> rejected 互相也不行
 * 
 */

let promise = new Promise((resolve, reject) => {
  console.log(1);
  // resolve('resolve');
  // reject('reject');
  throw new Error('new Error: err')
})

promise.then(res => {
  console.log('then');
  return new Promise((resolve, reject) => resolve('promise2'))
}).then(res => {
  console.log(res);
}).then(() => {

}, (err) => {
  console.log('then', err);
}).catch(err => {
  console.log('catch', err)
})

console.log('Global')

// err、catch 是能穿透的
// 不用reject() 使用 throw new Error()也可以捕获错误
